perm filename EDGE.SAI[PIC,HE] blob sn#430323 filedate 1979-04-03 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ENTRY XYSUPRESS
C00006 00003	END "EDGE"
C00007 ENDMK
C⊗;
ENTRY XYSUPRESS;
BEGIN "EDGE"
REQUIRE "36A" COMPILER!SWITCHES;
REQUIRE "BUFDEC.SAI" SOURCE!FILE;
INTERNAL INTEGER PROCEDURE XYSUPRESS(INTEGER inbuf,THR,NOISE);
    BEGIN "xysupress"
    INTEGER I,J,NV,ylv,ISTOP,JSTOP,yval1,IPTR,outbuf;
    INTEGER xval,xcoord,xlevel,xlv;
    BOOLEAN xstate;
    ISTOP←ROWS(inbuf);   JSTOP←COLMS(inbuf);
    getbuf(istop,jstop,BYTSZ(INBUF),outbuf←fndbuf);
    putsub(isubst(inbuf),jsubst(inbuf),outbuf);
    PUTSUP(THR,OUTBUF);
    NV←0;
    xstate←TRUE;
    xval←0;
    BEGIN "ALLOC ARRAYS"
    SAFE INTEGER ARRAY yval,ycoord,yoval,ylevel [1:JSTOP];
    SAFE BOOLEAN ARRAY ystate [1:JSTOP];
    ARRCLR(YSTATE,TRUE);
    ARRCLR(YVAL);	ARRCLR(YCOORD);	ARRCLR(YOVAL);	ARRCLR(YLEVEL);
    FOR I←1 THRU ISTOP DO
	BEGIN
	IPTR←INPTR(I,1,inbuf);
	FOR J←1 THRU JSTOP DO
	    BEGIN "CALC"
	    xlv←NV;
	    ylv←yoval[J];
	    YOVAL[J]←NV←ILDB(IPTR);
	    IF ystate[J]
		THEN IF NV<ylv
		    THEN BEGIN
			IF (yval[J]-NV)>NOISE
			    THEN BEGIN
				ystate[J]←FALSE;
				IF yval[J]>THR THEN PUTPNT(yval1←(ycoord[J]+ylevel[J]%2),J,YVAL[J],outbuf);
				ylevel[J]←0;
				END
			END
		    ELSE IF NV>ylv
			THEN BEGIN
			    ycoord[J]←I;
			    yval[J]←NV;
			    ylevel[J]←0;
			    END
			ELSE ylevel[J]←ylevel[J]+1
		ELSE IF NV>ylv THEN
		    BEGIN
		    ystate[J]←TRUE;
		    ycoord[J]←I;
		    yval[J]←NV;
		    END;
	    IF xstate
		THEN IF NV<xlv
		    THEN BEGIN
			IF (xval-NV)>NOISE
			    THEN BEGIN
				xstate←FALSE;
				IF xval>THR THEN PUTPNT(I,xcoord+xlevel%2,XVAL,outbuf);
				xlevel←0;
				END
			END
		    ELSE IF NV>xlv
			THEN BEGIN
			    xcoord←J;
			    xval←NV;
			    xlevel←0;
			    END
			ELSE xlevel←xlevel+1
		ELSE IF NV>xlv
		    THEN BEGIN
			xstate←TRUE;
			xcoord←J;
			xval←NV;
			END;
	    END "CALC";
	ROWCHK(CHKROW,ROWS,I,50);
	END;
    END;
    return(outbuf);
    END "xysupress";
END "EDGE"